LuCloud 2 Virtualization Structures/Tools and Mechanisms

LuCloud 2 Virtualization Structures/Tools and Mechanisms

五月 01, 2019

cover

Overview

根据虚拟层位置的不同将VM架构划分为三类:

  • hypervisor架构或VMM(Virtual Machine Monitor

    朴素的虚拟化层位于物理硬件和操作系统之间的体系结构,Xen架构和全虚拟化架构都属于此类;

  • para-virtualization

    狭义上的划分:虚拟化层位于物理硬件和被修改的客户操作系统之间的体系结构;

  • host-based virtualization

    虚拟化层位于主机操作系统和客户操作系统之间的体系结构。

Hypervisor

Hypervisor架构中hypervisor软件/层位于物理硬件和操作系统之间,此时这一虚拟层被称为hypervisorVMMhypervisor支持硬件级别的虚拟化,提供来自客户OS和应用的hypercalls

根据功能的不同可以将hypervisor分为两类:

  • 作为类似于Microsoft Hyper-V的微核架构micro-kernel architecture

    仅包括基本和不变的功能(例如物理内存管理和处理器调度),不包括设备驱动程序和其他可更改组件。

  • 作为类似于VMware ESX(提供服务器虚拟化)的单一监管架构monolithic hypervisor architecture

    实现所有上述功能,同时包括设备驱动程序的功能。

Instance: Xen

  • Xen是一个由剑桥大学开发的开源hypervisor程序;
  • 策略和机制分离,Xen hypervisor实现所有机制,Domain 0处理所有策略;
  • 属于微内核hypervisor
    • 本地不包括任何设备驱动,提供了一种客户操作系统可以直接访问物理设备的机制;
    • 代码尺寸很小;
  • 核心组件:hypervisor、内核、应用程序;
  • 不是所有客户操作系统都处于平等地位,具有控制特权的客户操作系统称为Domain 0,其他客户操作系统称为Domain UDomain 0可以:
    • 直接访问硬件和管理设备,为所有Domain U分配和映射硬件资源;
    • 像操作文件一样简单地创建、复制、保存、读取、修改、共享、迁移和回滚虚拟机。
  • Xen基于linux,安全等级为C2,由于控制了Domain 0就控制了整个系统,需要相应的安全策略提高Domain 0的安全性;

xen

Instance: Full Virtualization

全虚拟化full virtualization的虚拟化层位于物理硬件和客户操作系统之间。不需要修改主机操作系统,依赖于二进制翻译来陷入和虚拟化一些敏感、不可虚拟化的指令的执行。VMM、hypervisor都属于全虚拟化

  • 非特权/临界/critical指令直接运行在硬件上:

    确保系统安全性的同时提升性能。

  • 关键/临界/critica指令被发现然后替换为通过软件模拟的陷入VMM的指令:

    二进制翻译过程。

Binary Translation

full

The traditional x86 processor offers four instruction execution rings: Rings 0, 1, 2, and 3. The lower the ring number, the higher the privilege of instruction being executed. The OS is responsible for managing the hardware and the privileged instructions to execute at Ring 0, while user-level applications run at Ring 3.

VMware和很多其他软件公司在虚拟化时,将VMM置于Ring 0,客户操作系统置于Ring 1,如上图。由于由于特权指令只能在Ring 0 中执行,因此让VMM扫描指令流并识别出关键指令(包括特权指令、控制敏感指令、行为敏感指令),然后自陷并模拟这些指令的行为,这就是二进制翻译Binary Translation

二进制翻译非常耗时导致全虚拟化的性能并不理想。

Host-Based Virtualization

存在主机操作系统,负责管理硬件。虚拟化软件利用主机操作系统提供设备驱动和其他底层服务。

主机操作系统上安装虚拟化层,其上安装运行客户操作系统。许多其他应用程序也可以运行于主机操作系统中。

基于主机的体系结构较为灵活但性能太低,难以实际运用。

Para-Virtualization

半虚拟化需要修改客户操作系统,通过修改客户操作系统的内核支持用户程序的特殊API,从而尝试降低虚拟化开销,该进性能。

一般结构如下,这里将半虚拟化的客户OS置于Ring 0,虚拟化层置于客户OS和硬件之间,此时只有不可虚拟化的指令需要被替换成Hypercalls

para

在x86的定义中,虚拟化层应该被安装于Ring 0,此时半虚拟化的客户OS位于Ring 1(同全虚拟化),由于特权指令只能在Ring 0 中执行,因此特权指令和不可虚拟化的指令都需要被替换成Hypercalls

应用

许多虚拟化产品利用了半虚拟化体系结构,如Xen、KVM和VMware ESX等。

编译器支持的半虚拟化

全虚拟化在运行时解释和模拟关键指令,而编译器支持的半虚拟化在编译时控制这些指令,修改客户OS内核并将其替换为对虚拟化层的Hypercalls,然后修改过的客户OS仿真/模拟原始客户OS的行为。

例如Xen。

特点

半虚拟化可以有效降低开销、相对容易并可行,但是存在以下问题:

  • 兼容性和可移植性收到影响;
  • 维护半虚拟化的OS开销较高,因为可能需要大量修改OS内核;
  • 半虚拟化的性能优势随负载大幅变化。